package io.mft.datasource.db.accessor.impl;

import io.mft.commons.db.mapper.TableDbMapper;
import io.mft.commons.function.ExecuteReturn;
import io.mft.commons.function.response.kv.KVMap;
import io.mft.datasource.db.accessor.bean.DAContext;
import io.mft.datasource.db.accessor.bean.DbContextValue;
import io.mft.datasource.db.accessor.sql.SQLScript;
import io.mft.datasource.db.accessor.sql.SQLScriptManager;

/**
 * 数据库更新操作
 * @说明：TODO
 * @类型名称：DbUpdateAccessor
 * @创建者: 胡常建
 * @创建时间: 2021年1月28日 下午5:05:33
 * @修改者: 胡常建
 * @修改时间: 2021年1月28日 下午5:05:33
 */
public class DbUpdateAccessor extends DbUnQueryExecuteAccessor{
	@Override
	protected ExecuteReturn executeTable(DAContext<DbContextValue> context) throws Exception {
		DbContextValue dbContextValue = context.getContextValue();
		SQLScript sqlScript = SQLScriptManager.getInstance().get(dbContextValue.getScriptKey());
		if(dbContextValue.getApi().getInput().containPrimaryKey()) {
			TableDbMapper<KVMap> mapper = TableDbMapper.getInstance(dbContextValue.getDatasourceId(), sqlScript.getScript(),dbContextValue.getApi().getInput().getPrimaryKey().getActualKey(),KVMap.class);
			boolean isAddOrUpdate=context.getContextValue().getDataAccessRegulation().isAddOrUpdate();
			if (isAddOrUpdate) {
				mapper.addOrUpdate(context.getRequest().getRequestValue(),false);
			}else {
				mapper.update(context.getRequest().getRequestValue(),false);
			}
			ExecuteReturn executeReturn=ExecuteReturn.builder().build();
			return executeReturn; 
		}else {
			TableDbMapper<KVMap> mapper = TableDbMapper.getInstance(dbContextValue.getDatasourceId(), sqlScript.getScript(),KVMap.class);
			boolean isAddOrUpdate=context.getContextValue().getDataAccessRegulation().isAddOrUpdate();
			if (isAddOrUpdate) {
				mapper.addOrUpdate(context.getRequest().getRequestValue(),false);
			}else {
				mapper.update(context.getRequest().getRequestValue(),false);
			}
			ExecuteReturn executeReturn=ExecuteReturn.builder().build();
			return executeReturn; 
		}

	}
}
